package com.atguigu.spring.controller;

import com.atguigu.spring.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;

/**
 * @author 林允
 * @version 1.0
 * @description: TODO
 * @date 2023/5/9 8:29
 */

/**
 * 通过注解+扫描所配置bean的id，默认值为类的小驼峰，即类名的首字母为小写的结果
 * 自定义Id 可以通过标识组件的注解的value属性值设置bean的自定义的id
 *
 * @AutoWired：实现自动装配的注解
 * 1.@AutoWired注解能够标识的位置
 * a>标识在成员变量上，此时不需要设置成员变量的set方法
 * b>标识在set方法上
 * c>为当前变量赋值的构造方法上
 * 2.@Autowired注解的原理
 * a>默认通过byType的方式，在IOC容器中通过类型匹配某个bean为属性赋值
 * b>若头多个类型匹配的bean，此时会自动转换为byName的方式实现自动装配的效果
 * 即将要赋值的属性的属性名作为bean的id匹配某个bean为属性赋值 id和属性名一致
 * c>若byType和byName的方式都无法实现自动装配，即IOC容器中有多个类型匹配的bean
 * 且这些bean的id和要赋值的属性的属性名都不一致，此时抛出异常：NoUniqueBeanDefinitionException
 * d>此时可以在要赋值的属性上，添加一个注解@Qualifier
 * 通过该注解的value属性值，指定某个bean的id，将这个bean为属性赋值
 *
 * 注意：若IOC容器中没有任何一个类型匹配的bean，此时抛出异常NoSuchBeanDefinitionException
 * 在@Autowired注解中有个属性required，默认值为true ，要求必须完成自动装配
 * 可以将required设置为false，属性使用默认值
 */
//@Controller("controller")
@Controller
public class UserController {

    //@Autowired(required = false)
    //@Qualifier("service")
    @Autowired
    private UserService userService;

   /* public UserController(UserService userService) {
        this.userService = userService;
    }

    public UserService getUserService() {
        return userService;
    }

    public void setUserService(UserService userService) {
        this.userService = userService;
    }*/

    public void savUser(){
        userService.saveUser();
    }

}
